// 创建用户的小仓库
import { defineStore } from 'pinia'
// 引入接口 reqLogout
import { reqLogin } from '@/api/user'
// 引入数据类型
import type { loginFormData } from '@/api/user/type'
import type { UserState } from '../types/type'
//引入操作本地存储的工具方法
import { SET_TOKEN, GET_TOKEN, REMOVE_TOKEN } from '@/utils/token'
import { GET_ITEM, SET_ITEM } from '@/utils/local'
//引入路由(常量路由)
import { constantRoute, asnycRoute, anyRoute } from '@/router/routers.ts'
//@ts-ignore
import cloneDeep from 'lodash/cloneDeep'

//用于过滤当前用户需要展示的异步路由
function filterAsyncRoute(asnycRoute: any, routes: any) {
     return asnycRoute.filter((item: any) => {
          if (routes.includes(item.name)) {
               if (item.children && item.children.length > 0) {
                    //硅谷333账号:product\trademark\attr\sku
                    item.children = filterAsyncRoute(item.children, routes)
               }
               return true
          }
     })
}
const useUserStore = defineStore('User', {
     state: (): UserState => {
          return {
               token: GET_TOKEN(), //用户唯一标识token
               menuRoutes: constantRoute, //仓库存储生成菜单需要数组(路由)
               username: GET_ITEM('userInfoData')?.username ?? '',
               avatar: '',
               //存储当前用户是否包含某一个按钮
               buttons: [],
               verifyCodes: '',
               userInfoData: {},
               heartbeatInterval: null,
               gnqx: [],
          }
     },
     actions: {
          // 获取验证码信息
          async getVerifyCode() {
               // 发送请求获取验证码
               // const result: any = await GetVerifyCodes()
               // if (result) {
               //      this.verifyCodes = result
               // } else {
               //      return Promise.reject(new Error(result))
               // }
               // 随机生成四位验证码 数字类型
               // this.verifyCodes = Math.random().toString(36).substr(2, 4)

               // 随机生成四位验证码 一到九
               this.verifyCodes = Math.floor(Math.random() * 9000 + 1000).toString()
          },
          // 登录请求
          async userLogin(data: loginFormData) {
               // await Refresh()
               const [result]: any = await reqLogin(data)
               try {
                    this.token = result.TokenValue as string
                    // 本地持久化存储token
                    SET_TOKEN(result.TokenValue as string)
                    this.userInfoData = result
                    this.username = result.username
                    this.gnqx = result.gnqx
                    SET_ITEM('userInfoData' as string, result)
                    return 'ok'
               } catch (err) {
                    console.log(err)
               }
          },

          //获取用户信息方法
          async userInfo() {
               // //获取用户信息进行存储仓库当中[用户头像、名字]
               // let result: userInfoReponseData = await reqUserInfo()
               // //如果获取用户信息成功，存储一下用户信息
               // if (result.code == 200) {
               //      this.username = result.data.checkUser.username
               //      this.avatar = result.data.checkUser.avatar
               //      this.buttons = result.data.checkUser.buttons
               //      //计算当前用户需要展示的异步路由
               //      let userAsyncRoute = filterAsyncRoute(
               //           cloneDeep(asnycRoute),
               //           result.data.checkUser.routes,
               //      )
               //      //菜单需要的数据整理完毕
               //      this.menuRoutes = [
               //           ...constantRoute,
               //           ...userAsyncRoute,
               //           anyRoute,
               //      ]
               //      //目前路由器管理的只有常量路由:用户计算完毕异步路由、任意路由动态追加
               //      ;[...userAsyncRoute, anyRoute].forEach((route: any) => {
               //           router.addRoute(route)
               //      })
               //      return 'ok'
               // } else {
               //      return Promise.reject(new Error('获取信息失败'))
               // }
          },
          //退出登录
          async userLogout() {
               //退出登录请求
               // let result: any = await reqLogout()
               // if (result.code == 200) {
               //   //目前没有mock接口:退出登录接口(通知服务器本地用户唯一标识失效)
               //   this.token = ''
               //   this.username = ''
               //   this.avatar = ''
               //   REMOVE_TOKEN()
               //   return 'ok'
               // } else {
               //   return Promise.reject(new Error(result.message))
               // }
               this.userInfoData = {}
               this.token = ''
               this.username = ''
               this.avatar = ''
               REMOVE_TOKEN()
          },
          // 判断用户是否有权限
          hasPermission(permission: string) {
               if (this.gnqx.includes('*')) return true
               return this.gnqx.includes(permission)
               // let allPermissionList = [
               //      '插入数据',
               //      '批量插入',
               //      '审核数据',
               //      '删除数据',
               //      '发布任务',
               //      '删除任务',
               //      '注册',
               //      '进度填报',
               // ]
               // return permissionList.includes(permission)
          },
     },
     getters: {},
     persist: true, // true 表示开启持久化保存
})
export default useUserStore
